package main

import (
	"fmt"
	"log"

	"simple-crm/config"
)

func main() {
	// 加载配置
	cfg := config.Load()

	// 初始化数据库连接
	db := config.InitDB(cfg)

	fmt.Println("开始权限表结构迁移...")

	// 检查是否已有pid字段
	var count int64
	db.Raw("SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = ? AND table_name = 'permissions' AND column_name = 'pid'", cfg.Database.Name).Scan(&count)

	if count > 0 {
		fmt.Println("权限表结构已经是最新版本")
		return
	}

	// 添加新字段
	fmt.Println("添加pid和is_group字段...")
	if err := db.Exec("ALTER TABLE permissions ADD COLUMN pid INT UNSIGNED DEFAULT 0 COMMENT '父级权限ID，0表示顶级权限分组'").Error; err != nil {
		log.Printf("添加pid字段失败: %v", err)
	}

	if err := db.Exec("ALTER TABLE permissions ADD COLUMN is_group BOOLEAN DEFAULT FALSE COMMENT '是否为权限分组'").Error; err != nil {
		log.Printf("添加is_group字段失败: %v", err)
	}

	// 添加索引
	fmt.Println("添加索引...")
	if err := db.Exec("ALTER TABLE permissions ADD INDEX idx_pid (pid)").Error; err != nil {
		log.Printf("添加索引失败: %v", err)
	}

	// 修改现有字段为可空
	fmt.Println("修改resource和action字段为可空...")
	if err := db.Exec("ALTER TABLE permissions MODIFY COLUMN resource VARCHAR(100) NULL COMMENT '资源标识'").Error; err != nil {
		log.Printf("修改resource字段失败: %v", err)
	}

	if err := db.Exec("ALTER TABLE permissions MODIFY COLUMN action VARCHAR(100) NULL COMMENT '操作标识'").Error; err != nil {
		log.Printf("修改action字段失败: %v", err)
	}

	fmt.Println("权限表结构迁移完成！")
	fmt.Println("现在可以运行权限测试数据生成脚本了")
}
